#include <iostream>
#include <string>
#include <fstream>
#include "Almacenamiento.h"

void EstrategiaAlmacenamientoRegistros::abrir(Almacenamiento * almacenamiento) {
	Metadata* meta;
	meta = almacenamiento->abrir('b');
	if (meta != NULL && meta->getTipo() != 'r') {
		almacenamiento->setExisteMetadata(true);
		almacenamiento->setMetadata(meta);
	} else if (meta == NULL) {
		almacenamiento->setExisteMetadata(false);
		almacenamiento->inicializarMetadata('r');
	} else
		throw 1;
}

void EstrategiaAlmacenamientoRegistros::cerrar(Almacenamiento * almacenamiento) {
	almacenamiento->cerrar();
}

int EstrategiaAlmacenamientoRegistros::almacenar(
		Almacenamiento* almacenamiento, Registro componente) {
	int offset = almacenamiento->buscarEspacioLibre(0);
	almacenamiento->escribir(componente, offset);
	return offset;
}

Registro EstrategiaAlmacenamientoRegistros::recuperar(
		Almacenamiento* almacenamiento, int offset, list<string> claves) {
	Registro* registro = dynamic_cast<Registro*> (almacenamiento->leer(offset));
	return *registro;
}

void EstrategiaAlmacenamientoRegistros::modificar(
		Almacenamiento * almacenamiento, Registro componente, int offset) {
	almacenamiento->escribir(componente, offset);
}

void EstrategiaAlmacenamientoRegistros::borrar(Almacenamiento * almacenamiento,
		int offset, list<string> claves) {
	almacenamiento->borrarComp(offset);
}

void EstrategiaAlmacenamientoRegistros::borrar(Almacenamiento* almacenamiento,Registro componente){

}

void EstrategiaAlmacenamientoRegistros::imprimir(Almacenamiento* almacenamiento){

}
